package cn.tedu.store.product.service;

import cn.tedu.store.commons.pojo.portal.vo.ProductDetailVO;
import cn.tedu.store.commons.pojo.product.dto.SpuAddNewDTO;
import cn.tedu.store.commons.pojo.product.dto.SpuUpdateDTO;
import cn.tedu.store.commons.pojo.product.vo.SpuListItemVO;
import cn.tedu.store.commons.pojo.product.vo.SpuStandardVO;
import cn.tedu.store.commons.web.JsonPage;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Spu后台管理业务接口
 *
 * @author RelentlessFlow
 * @version 0.0.1
 */
@Transactional
public interface ISpuService {

    /**
     * 添加新的商品信息
     * @param spuAddNewDTO 新的商品信息
     * @return 受影响的行数
     */
    void addNew(SpuAddNewDTO spuAddNewDTO);

    /**
     * 根据id删除商品
     * @param id 商品id
     * @return 受影响的行数
     */
    void deleteById(Long id);

    /**
     * 统计商品数量
     * @return 商品数量
     */
    int count();

    void setDeleted(Long id);
    void setNotDeleted(Long id);
    void setPublished(Long id);
    void setNotPublished(Long id);
    void setNewArrival(Long id);
    void setNotNewArrival(Long id);
    void setRecommend(Long id);
    void setNotRecommend(Long id);
    void setChecked(Long id);
    void setUnChecked(Long id);

    void update(Long id, SpuUpdateDTO spuUpdateDTO);

    /**
     * 根据id获取商品详情
     * @param id 商品id
     * @return 商品详情
     */
    SpuStandardVO getStandardById(Long id);

    public ProductDetailVO getPortalDetailById(Long id);

    JsonPage<SpuListItemVO> list(Integer pageNum, Integer pageSize);
    JsonPage<SpuListItemVO> portalList(Integer pageNum, Integer pageSize);
    JsonPage<SpuListItemVO> recommendList(Integer pageNum, Integer pageSize);
    JsonPage<SpuListItemVO> newProductList(Integer pageNum, Integer pageSize);

    /**
     * 根据品牌id获取商品列表
     * @param brandId 品牌id
     * @return 商品列表
     */
    JsonPage<SpuListItemVO> listByBrand(Long brandId, Integer pageNum, Integer pageSize);

    /**
     * 根据分类id获取商品列表
     * @param categoryId 品牌id
     * @return 商品列表
     */
    JsonPage<SpuListItemVO> listByCategory(Long categoryId, Integer pageNum, Integer pageSize);
}
